package mx.ipn.escom.redes.controlacceso.login.controller;

import mx.ipn.escom.redes.equipo.model.Empleado;
import mx.ipn.escom.redes.gestionarempleado.business.EmpleadoBs;
import mx.ipn.escom.redes.util.NombreObjetosSession;
import mx.ipn.escom.redes.util.SessionManager;

import org.apache.struts2.convention.annotation.Namespace;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Namespace("/control-acceso")
public class LoginCtrl extends ActionSupport implements ModelDriven<Empleado> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Integer idSel;

	private Empleado model;

	private EmpleadoBs empleadoBs;

	public String index() {
		SessionManager.clear();
		SessionManager.delete(NombreObjetosSession.USUARIO);
		return "index";
	}

	public void validateWelcome() {
		if (model.getEmail().isEmpty() || model.getEmail() == null) {
			addActionError(getText("LOGIN_EMAIL"));
		}
		if (model.getPassword().isEmpty() || model.getPassword() == null) {
			addActionError(getText("LOGIN_PASSWORD"));
		}
	}

	public String welcome() {
		Empleado aux = null;
		aux = empleadoBs
				.encontrarUsuario(model.getEmail(), model.getPassword());
		if (aux == null) {
			addActionError(getText("ACCESSO_DENEGADO"));
			return "index";
		} else {
			SessionManager.clear();
			SessionManager.set(aux.getPerfil().getNombre(),
					NombreObjetosSession.PERFIL_USUARIO);
			SessionManager.set(aux, NombreObjetosSession.USUARIO);
		}
		return "welcome";
	}

	public String cerrarSesion() {
		SessionManager.clear();
		return "index";
	}

	/**
	 * @return the idSel
	 */
	public Integer getIdSel() {
		return idSel;
	}

	/**
	 * @param idSel
	 *            the idSel to set
	 */
	public void setIdSel(Integer idSel) {
		if (this.idSel != null) {
			model = empleadoBs.findById(idSel);
		}
		this.idSel = idSel;
	}

	/**
	 * @return the empleadoBs
	 */
	public EmpleadoBs getEmpleadoBs() {
		return empleadoBs;
	}

	/**
	 * @param empleadoBs
	 *            the empleadoBs to set
	 */
	public void setEmpleadoBs(EmpleadoBs empleadoBs) {
		this.empleadoBs = empleadoBs;
	}

	public Empleado getModel() {
		if (model == null) {
			model = new Empleado();
		}
		return model;
	}
}
